Σχετικά άρθρα

*   [Arch Packaging Standards](/index.php/Arch_Packaging_Standards "Arch Packaging Standards")
*   [Creating Packages](/index.php/Creating_Packages "Creating Packages")
*   [Custom local repository](/index.php/Custom_local_repository "Custom local repository")
*   [pacman Tips](/index.php/Pacman_Tips "Pacman Tips")

Το **PKGBUILD** είναι το αρχείο περιγραφής της διαδικασίας [δημιουργίας πακέτων](/index.php/Creating_packages "Creating packages") του [Arch Linux](/index.php/Arch_Linux "Arch Linux").

Τα πακέτα στο Arch Linux δημιουργούνται με το εργαλείο [makepkg](/index.php/Makepkg "Makepkg") και οι πληροφορίες για τη δημιουργία τους βρίσκονται στο αρχείο PKGBUILD. Όταν εκτελείται η εντολή **makepkg**, το πρόγραμμα ψάχνει για ένα αρχείο `PKGBUILD` στον τρέχον κατάλογο και ακολουθεί τις οδηγίες είτε για την μεταγλώττιση είτε για την ανάκτηση των αρχείων που απαιτούνται για τη δημιουργία του πακέτου (`*pkgname*.pkg.tar.xz`) το οποίο τελικά θα περιέχει όλα τα binary αρχεία καθώς και τις οδηγίες εγκατάστασης και μπορεί πλέον να εγκατασταθεί απευθείας μέσω του [pacman](/index.php/Pacman "Pacman").

## Contents

*   [1 Μεταβλητές](#.CE.9C.CE.B5.CF.84.CE.B1.CE.B2.CE.BB.CE.B7.CF.84.CE.AD.CF.82)
    *   [1.1 pkgname](#pkgname)
    *   [1.2 pkgver](#pkgver)
    *   [1.3 pkgrel](#pkgrel)
    *   [1.4 epoch](#epoch)
    *   [1.5 pkgdesc](#pkgdesc)
    *   [1.6 arch](#arch)
    *   [1.7 url](#url)
    *   [1.8 license](#license)
    *   [1.9 groups](#groups)
    *   [1.10 depends](#depends)
    *   [1.11 makedepends](#makedepends)
    *   [1.12 checkdepends](#checkdepends)
    *   [1.13 optdepends](#optdepends)
    *   [1.14 provides](#provides)
    *   [1.15 conflicts](#conflicts)
    *   [1.16 replaces](#replaces)
    *   [1.17 backup](#backup)
    *   [1.18 options](#options)
    *   [1.19 install](#install)
    *   [1.20 changelog](#changelog)
    *   [1.21 source](#source)
    *   [1.22 noextract](#noextract)
    *   [1.23 md5sums](#md5sums)
    *   [1.24 sha1sums](#sha1sums)
    *   [1.25 sha256sums, sha384sums, sha512sums](#sha256sums.2C_sha384sums.2C_sha512sums)
*   [2 Δείτε επίσης](#.CE.94.CE.B5.CE.AF.CF.84.CE.B5_.CE.B5.CF.80.CE.AF.CF.83.CE.B7.CF.82)

## Μεταβλητές

Οι παρακάτω μεταβλητές μπορούν να συμπληρωθούν στο αρχείο PKGBUILD.

Είναι συνήθης πρακτική να ορίζει κανείς τις μεταβλητές με την ίδια σειρά με την οποία παρουσιάζονται εδώ. Ωστόσο, αυτό δεν είναι αναγκαστικό, εφόσον χρησιμοποιείται ορθή σύνταξη [Bash](/index.php/Bash "Bash").

### pkgname

Το όνομα του πακέτου. Πρέπει να περιέχει *είτε αλφαριθμητικούς χαρακτήρες και/ή τους χαρακτήρες @ . _ + - (at, τελεία, underscore, συν, παύλα)*. Όλοι οι χαρακτήρες πρέπει να είναι *πεζοί* ενώ τα ονόματα *δεν πρέπει να ξεκινάνε με παύλες*. Για λόγους συνοχής, το `pkgname` πρέπει να αντιστοιχεί στο όνομα που χρησιμοποιείται στο tarball του πηγαίου κώδικα του προγράμματος για το οποίο προορίζεται το PKGBUILD. Για παράδειγμα, αν ο πηγαίος κώδικας του προγράμματος διαμοιράζεται ως `foobar-2.5.tar.gz` τότε η μεταβλητή `pkgname` πρέπει να είναι `foobar`. Ο τρέχον ενεργός κατάλογος στον οποίο βρίσκεται το PKGBUILD πρέπει επίσης να ταιριάζει με το `pkgname`.

### pkgver

Η τρέχουσα έκδοση του πακέτου. Αυτή η τιμή πρέπει να είναι ίδια με την έκδοση την οποία δημοσίευσε ο προγραμματιστής του πακέτου. Μπορεί να περιέχει χαρακτήρες, αριθμούς και τελείες αλλά **δεν** πρέπει να περιέχει παύλες. Αν ο αρχικός προγραμματιστής χρησιμοποιεί παύλες στην έκδοση του πακέτου, τότε αυτές πρέπει να αντικατασταθούν με underscore. Για παράδειγμα, αν η έκδοση είναι *0.99-10* τότε πρέπει να αλλαχτεί σε *0.99_10*. Αν η μεταβλητή `pkgver` χρησιμοποιείται μετέπειτα στο PKGBUILD τότε το underscore μπορεί εύκολα να αντικατασταθεί. Για παράδειγμα:

```
source=($pkgname-${pkgver//_/-}.tar.gz)

```

### pkgrel

Ο αριθμός έκδοσης του πακέτου, ο οποίος αφορά το Arch Linux. Αυτή η μεταβλητή επιτρέπει στους χρήστες να διαφοροποιούν συνεχόμενα builds της ίδιας έκδοσης του πακέτου. Όταν βγαίνει μια νέα έκδοση του πακέτου ή ένα πακέτο δημιουργείται πρώτη φορά τότε το `pkgrel` **πρέπει να είναι 1**. Καθώς βγαίνουν διορθώσεις ή βελτιστοποιήσεις στο PKGBUILD το `pkgrel` αυξάνει κατά ένα και το πακέτο επαναδημοσιεύεται.

### epoch

Μια ακέραια τιμή, ειδική για το Arch Linux, η οποία υπαγορεύει ως προς ποιο 'χρονικό' πρέπει να συγκριθούν οι αριθμοί έκδοσης. Η τιμή αυτή επιτρέπει την παράκαμψη των συνήθων κανόνων σύγκρισης έκδοσης για πακέτα τα οποία έχουν ασυνεπή αρίθμηση έκδοσης, απαιτούν υποβάθμιση, αλλαγή πλαισίου αρίθμησης, κτλ. Εξ' ορισμού, τα πακέτα θεωρείται πως έχουν τιμή epoch *0*. Μην χρησιμοποιείτε το πεδίο αυτό εκτός και αν γνωρίζετε τι κάνετε.

### pkgdesc

Περιγραφή του πακέτου. Η έκταση της περιγραφής πρέπει να είναι το πολύ 80 χαρακτήρες και δεν πρέπει να περιλαμβάνει το όνομα του πακέτου με αυτοαναφορικό τρόπο. Για παράδειγμα, "Το Nedit είναι ένας επεξεργαστής κειμένου για το X11" θα έπρεπε να γραφεί ως "ένας επεξεργαστής κειμένου για το X11."

**Note:** Μην ακολουθείτε αυτόν τον κανόνα αβίαστα όταν υποβάλετε πακέτα στο [AUR](/index.php/AUR "AUR"). Εάν το όνομα του πακέτου διαφέρει για κάποιο λόγο, από το όνομα της εφαρμογής, Η ενσωμάτωση του πλήρους ονόματος στην περιγραφή μπορεί να είναι ο μόνος τρόπος να διασφαλιστεί η εύρεση του πακέτου κατά την αναζήτηση.

### arch

Μια σειρά αρχιτεκτονικών στις οποίες είναι γνωστό ότι το αρχείο `PKGBUILD` μπορεί να λειτουργήσει. Προς το παρόν, πρέπει να περιέχει `i686` ή/και `x86_64`, `arch=('i686' 'x86_64')`. Η τιμή `any` μπορεί να χρησιμοποιηθεί για πακέτα ανεξαρτήτου αρχιτεκτονικής.

Μπορείτε να προσπελάσετε την αρχιτεκτονική του συστήματος που απευθύνεστε με την μεταβλητή `$CARCH` κατά την διάρκεια της μεταγλώττισης, ακόμα και κατά τον ορισμό μεταβλητών. Δείτε επίσης [FS#16352](https://bugs.archlinux.org/task/16352). Παράδειγμα:

```
depends=(foobar)
if test "$CARCH" == x86_64; then
  depends+=(lib32-glibc)
fi

```

### url

Η διεύθυνση URL της επίσημης ιστοσελίδας του λογισμικού του οποίου το πακέτο δημιουργείται.

### license

Η άδεια υπό την οποία διανέμεται το λογισμικό. Το πακέτο [licenses](https://www.archlinux.org/packages/?name=licenses) έχει δημιουργηθεί στην ομάδα πακέτων `[core]` το οποίο συγκεντρώνει τις κοινά χρησιμοποιούμενες άδειες στον κατάλογο `/usr/share/licenses/common`, π.χ. `/usr/share/licenses/common/GPL`. Εάν ένα πακέτο έχει διανεμηθεί υπό μιας εκ των προαναφερθέντων αδειών, η τιμή πρέπει να είναι ίση με το όνομα του καταλόγου, π.χ. `license=('GPL')`. Εάν η ανάλογη άδεια εμπεριέχεται στο επίσημο πακέτο [licenses](https://www.archlinux.org/packages/?name=licenses), πρέπει να ακολουθεί η παρακάτω διαδικασία:

1.  Το αρχείο(α) άδειας πρέπει να συμπεριληφθεί στο κατάλογο: `/usr/share/licenses/*pkgname*/`, π.χ. `/usr/share/licenses/foobar/LICENSE`.
2.  Αν το πηγαίο αρχείο tarball ΔΕΝ περιέχει τις λεπτομέρειες αδείας και η άδεια εμφανίζεται μόνο σε κάποια άλλη τοποθεσία, π.χ. μια ιστοσελίδα, τότε θα πρέπει να αντιγράψετε την άδεια σε ένα αρχείο και να το συμπεριλάβετε.
3.  Προσθέστε το ενδεικτικό `custom` στο πεδίο `license`. Προαιρετικά, μπορείτε να αντικαταστήσετε το ενδεικτικό `custom` με το `custom:όνομα αδείας`. Όταν μια άδεια χρησιμοποιηθεί σε δύο ή περισσότερα πακέτα σε επίσημο repository (συμπεριλαμβανομένου του `[community]`), προστίθεται στο πακέτο [licenses](https://www.archlinux.org/packages/?name=licenses).

*   Οι άδειες [BSD](https://en.wikipedia.org/wiki/BSD_License "wikipedia:BSD License"), [MIT](https://en.wikipedia.org/wiki/MIT_License "wikipedia:MIT License"), [zlib/png](https://en.wikipedia.org/wiki/ZLIB_license "wikipedia:ZLIB license") και [Python](https://en.wikipedia.org/wiki/Python_License "wikipedia:Python License") είναι ειδικές περιπτώσεις και δεν ήταν δυνατό να συμπεριληφθούν στο πακέτο [licenses](https://www.archlinux.org/packages/?name=licenses). για την διατήρηση της απλότητας του πεδίου `license`, αντιμετωπίζονται σαν κοινή άδεια (`license=('BSD')`, `license=('MIT')`, `license=('ZLIB')` και `license=('Python')`) αλλά τεχνικά μιλώντας, κάθε μια είναι μια κοινή άδεια διότι κάθε μια ακολουθεί την δική της γραμμή πνευματικών δικαιωμάτων. Οποιαδήποτε πακέτα έχουν αδειοδοτηθεί υπό μια εκ των τεσσάρων αδειών θα πρέπει να έχουν την δική τους μοναδική άδεια αποθηκευμένη στον κατάλογο `/usr/share/licenses/*pkgname*`. Κάποια πακέτα μπορεί να μην καλύπτονται από μια και μόνο άδεια. Σε αυτές τις περιπτώσεις, μπορούν να γίνουν πολλαπλές καταχωρήσεις στο πεδίο license, π.χ. `license=('GPL' 'custom:όνομα αδείας')`.
*   Επιπροσθέτως, η (L)GPL έχει πολλές εκδόσεις και παραλλαγές αυτών. Όσον αφορά το λογισμικό (L)GPL, η σύμβαση είναι:
    *   (L)GPL - (L)GPLv2 ή οποιαδήποτε μεταγεννέστερη έκδοση
    *   (L)GPL2 - (L)GPL2 μόνο
    *   (L)GPL3 - (L)GPL3 ή οποιαδήποτε μεταγεννέστερη έκδοση
*   Εάν έπειτα από διερεύνηση του θέματος δεν μπορεί να προσδιοριστεί κάποια άδεια, το `PKGBUILD.proto` προτείνει την χρήση του ενδεικτικού `unknown`. Παρόλα αυτά, το upstream πρέπει να ειδοποιηθεί για τους όρους υπό τους οποίους το λογισμικό είναι ( και δεν είναι) διαθέσιμο.

**Tip:** Μερικοί προγραμματιστές δεν παρέχουν ξεχωριστό αρχείο και περιγράφουν τους όρους διαμοιρασμού σε τμήμα του κοινώς χρησιμοποιούμενου αρχείου ReadMe.txt. Οι πληροφορίες αυτές μπορούν να εξαχθούν σε ξεχωριστό αρχείο κατά την διάρκεια της φάσης `μεταγλώττισης` με την χρήση ανάλογης εντολής με την: `sed -n '/**This software**/,/ **thereof.**/p' ReadMe.txt > LICENSE`.

### groups

Η ομάδα στη οποία ανήκει το πακέτο. Για παράδειγμα, όταν εγκαταστήσετε το πακέτο [kdebase](https://www.archlinux.org/groups/x86_64/kdebase/), εγκαθίστανται όλα τα πακέτα τα οποία ανήκουν στην ομάδα [kde](https://www.archlinux.org/groups/x86_64/kde/).

### depends

Μια σειρά ονομάτων πακέτων τα οποία πρέπει να εγκατασταθούν πριν να μπορέσει το εν λόγω λογισμικό να εκτελεστεί. Αν κάποιο λογισμικό απαιτεί την ύπαρξη μιας ελάχιστης έκδοσης κάποιας εξάρτησης, ο τελεστής `>=` θα πρέπει να χρησιμοποιηθεί για να υποδείξει αυτήν την απαίτηση, π.χ. `depends=('foobar>=1.8.0')`. δεν χρειάζεται να παραθέσετε τα πακέτα από τα οποία εξαρτάται το λογισμικό σας εάν άλλα πακέτα από τα οποία εξαρτάται το λογισμικό σας έχουν ήδη ορίσει τα πακέτα αυτά ως εξαρτήσεις τους. Επί παραδείγματι, το πακέτο [gtk2](https://www.archlinux.org/packages/?name=gtk2) εξαρτάται από το πακέτο [glib2](https://www.archlinux.org/packages/?name=glib2) και το πακέτο [glibc](https://www.archlinux.org/packages/?name=glibc). Όμως, το πακέτο [glibc](https://www.archlinux.org/packages/?name=glibc) δεν χρειάζεται να παρατεθεί ως εξάρτηση για το πακέτο [gtk2](https://www.archlinux.org/packages/?name=gtk2) διότι είναι μια εκ των εξαρτήσεων του πακέτου [glib2](https://www.archlinux.org/packages/?name=glib2).

### makedepends

Μια σειρά ονομάτων πακέτων τα οποία πρέπει να εγκατασταθούν για να είναι δυνατή η μεταγλώττιση του λογισμικού αλλά δεν είναι απαραίτητα για την χρήση του μετά την εγκατάσταση. Μπορείτε να ορίσετε την ελάχιστη έκδοση εξάρτησης των πακέτων με τον ίδιο τρόπο που περιγράφηκε στην παράγραφο `depends`.

**Warning:** Η ομάδα πακέτων [base-devel](https://www.archlinux.org/groups/x86_64/base-devel/) θεωρείται εγκατεστημένη κατά την μεταγλώττιση με το makepkg . Τα μέλη της ομάδας πακέτων "base-devel" **δεν θα πρέπει** να συμπεριλαμβάνονται στο πεδίο `makedepends`

### checkdepends

Μια σειρά πακέτων από τα οποία εξαρτάται το εν λόγω πακέτο ώστε να εκτελέσει την σειρά δοκιμών του τα οποία όμως δεν χρειάζονται κατά την κανονική εκτέλεση. Τα πακέτα που παραθέτονται σε αυτή την λίστα ακολουθούν το ίδιο πρότυπο με το πεδίο depends. Αυτές οι εξαρτήσεις λαμβάνονται υπόψη μόνο όταν η συνάρτηση [check()](/index.php/Creating_packages#The_check.28.29_function "Creating packages") είναι παρούσα και πρόκειται να εκτελεστεί από το makepkg.

### optdepends

Μια σειρά ονομάτων πακέτων τα οποία δεν χρειάζονται για την λειτουργικότητα του λογισμικού αλλά παρέχουν επιπρόσθετα χαρακτηριστικά. Μια σύντομη περιγραφή του τι παρέχει το κάθε πακέτο πρέπει επίσης να σημειωθεί. Ένα πεδίο `optdepends` μπορεί να έχει την εξής μορφή:

```
optdepends=('cups: printing support'
'sane: scanners support'
'libgphoto2: digital cameras support'
'alsa-lib: sound support'
'giflib: GIF images support'
'libjpeg: JPEG images support'
'libpng: PNG images support')

```

### provides

Μια σειρά ονομάτων πακέτων (ή ένα εικονικό πακέτο όπως το `cron` η το `sh`) των οποίων τα χαρακτηριστικά παρέχει το τρέχον πακέτο. Πακέτα τα οποία παρέχουν τα ίδια πράγματα μπορούν να εγκατασταθούν ταυτόχρονα εκτός εάν συγκρούονται μεταξύ τους (δείτε παρακάτω). Εάν χρησιμοποιήσετε την μεταβλητή αυτή, θα πρέπει να προσθέσετε την έκδοση (`pkgver` και ίσως την `pkgrel`) την οποία θα παράσχει αυτό το πακέτο εάν οι εξαρτήσεις επηρεάζονται από αυτό. Για παράδειγμα, Αν παρέχετε μια προσαρμοσμένη έκδοση του πακέτου *qt* με όνομα *qt-foobar* έκδοση 3.3.8 η οποία παρέχει το πακέτο *qt* τότε το πεδίο `provides` θα πρέπει να είναι κάπως έτσι `provides=('qt=3.3.8')`. Εάν χρησιμοποιούσαμε το `provides=('qt')` θα αποτύγχαναν να ικανοποιηθούν εκείνες οι εξαρτήσεις οι οποίες απαιτούν μια συγκεκριμένη έκδοση του *qt*. Μην προσθέσετε το πεδίο `pkgname` στο πεδίο provides , διότι γίνεται αυτόματα.

### conflicts

Μία σειρά ονομάτων πακέτων τα οποία μπορεί να δημιουργήσουν προβλήματα με το τρέχον πακέτο εάν εγκατασταθεί. Το Πακέτο με αυτό το όνομα και όλα τα πακέτα που `παρέχει` όπως εικονικά πακέτα με αυτό το όνομα, θα αφαιρεθούν. Μπορείτε να ορίσετε τις ιδιότητες έκδοσης των συγκρουόμενων πακέτων όπως και στο πεδίο `depends`.

### replaces

Μια σειρά παρωχημένων ονομάτων πακέτων τα οποία αντικαθίστανται από το τρέχον πακέτο, π.χ. `replaces=('wireshark')` αντικαθίσταται με το πακέτο [wireshark-gtk](https://www.archlinux.org/packages/?name=wireshark-gtk). μετά τον συγχρονισμό η εντολή `pacman -Sy`, θα αντικαταστήσει άμεσα ένα εγκατεστημένο πακέτο μόλις εντοπίσει κάποιο άλλο πακέτο με την κατάλληλη ετικέτα `replaces` στα αποθετήρια. Αν παρέχετε μια εναλλακτική έκδοση για ένα ήδη υπάρχον ένα άλλο πακέτο, Χρησιμοποιείστε την μεταβλητή `conflicts` η οποία λαμβάνεται υπόψη μόνο κατά την εγκατάσταση του συγκρουόμενου πακέτου.

### backup

Μια σειρά αρχείων τα οποία περιέχουν τροποποιήσεις των χρηστών του συστήματος και θα πρέπει να διατηρηθούν κατά την αναβάθμιση η την απομάκρυνση ενός πακέτου, αποσκοπεί κυρίως σε αρχεία ρυθμίσεων στον κατάλογο `/etc`.

Κατά την αναβάθμιση, η νέα έκδοση μπορεί να αποθηκευτεί ως `file.pacnew` ώστε να αποφευχθεί η αντικατάσταση ενός αρχείου που υπάρχει ήδη και έχει τροποποιηθεί απο τον χρήστη. Ομοίως, όταν το πακέτο απομακρύνεται, το τροποποιημένο από το χρήστη αρχείο θα διατηρηθεί ως `file.pacsave` εκτός και αν το πακέτο απομακρύνθηκε με την εντολή `pacman -Rn`.

Οι διαδρομές των αρχείων σε αυτό το πεδίο θα πρέπει να είναι σχετικές διαδρομές (π.χ. `etc/pacman.conf`) και όχι απόλυτες (π.χ. `/etc/pacman.conf`). Δείτε επίσης [Pacnew and Pacsave files](/index.php/Pacnew_and_Pacsave_files "Pacnew and Pacsave files").

### options

Αυτό το πεδίο σας επιτρέπει να παρακάμψετε ένα μέρος της προκαθορισμένης συμπεριφοράς του makepkg, ορισμένη στο αρχείο /etc/makepkg.conf. Για να ορίσετε μια επιλογή, προσθέστε το όνομα της επιλογής στο πεδίο. Για να αντιστρέψετε την προκαθορισμένη επιλογή , εισάγετε ένα ! στην αρχή της επιλογής. Οι ακόλουθες επιλογές μπορούν να προστεθούν στο πεδίο:

*   ***strip*** - Αφαιρεί σύμβολα από εκτελέσιμα αρχεία και βιβλιοθήκες. Αν χρησιμοποιείτε συχνά έναν ανιχνευτή σφαλμάτων σε προγράμματα η βιβλιοθήκες, ίσως είναι σκόπιμο να απενεργοποιήσετε την επιλογή αυτή.
*   ***docs*** - Αποθηκεύει καταλόγους `/doc`.
*   ***libtool*** - Διατηρεί τα αρχεία *libtool* (`.la`) στα πακέτα.
*   ***emptydirs*** - Διατηρεί τους κενούς καταλόγους στα πακέτα.
*   ***zipman*** - Συμπιέζει τις σελίδες *man* και *info* με την εφαρμογή *gzip*.
*   ***ccache*** - Επιτρέπει την χρήση `ccache` κατά την δημιουργία του πακέτου. Χρησιμεύει περισσότερο στη αρνητική του μορφή `!ccache` με συγκεκριμένα πακέτα που αντιμετωπίζουν προβλήματα κατά την δημιουργία τους με την επιλογή `ccache` ενεργή.
*   ***distcc*** - Επιτρέπει την χρήση `distcc` κατά την δημιουργία του πακέτου. Χρησιμεύει περισσότερο στη αρνητική του μορφή `!distcc` με συγκεκριμένα πακέτα που αντιμετωπίζουν προβλήματα κατά την δημιουργία τους με την επιλογή `distcc` ενεργή.
*   ***buildflags*** - Επιτρέπει την χρήση ορισμένων από τον χρήστη `buildflags` (CFLAGS, CXXFLAGS, LDFLAGS) κατά την δημιουργία του πακέτου. Χρησιμεύει περισσότερο στη αρνητική του μορφή `!buildflags` με συγκεκριμένα πακέτα που αντιμετωπίζουν προβλήματα κατά την δημιουργία τους με τροποποιημένες `buildflags`.
*   ***makeflags*** - Επιτρέπει την χρήση ορισμένων από τον χρήστη `makeflags` κατά την δημιουργία του πακέτου. Χρησιμεύει περισσότερο στη αρνητική του μορφή `!makeflags` με συγκεκριμένα πακέτα που αντιμετωπίζουν προβλήματα κατά την δημιουργία τους με τροποποιημένες `makeflags`.

### install

Το όνομα της δέσμης εντολών `.install` η οποία θα συμπεριληφθεί στο πακέτο. Το pacman έχει την δυνατότητα να αποθηκεύει και να εκτελεί μια δέσμη εντολών ανά πακέτο κατά την εγκατάσταση, την απομάκρυνση η την αναβάθμιση ενός πακέτου. Η δέσμη εντολών περιέχει τις ακόλουθες συναρτήσεις οι οποίες εκτελούνται σε διάφορες χρονικές στιγμές:

*   ***pre_install*** - Η δέσμη εντολών εκτελείται ακριβώς πριν εξαχθούν τα αρχεία. Δέχεται ένα όρισμα: η νέα έκδοση του πακέτου.
*   ***post_install*** - Η δέσμη εντολών εκτελείται ακριβώς μετά την εξαγωγή των αρχείων. Δέχεται ένα όρισμα: η νέα έκδοση του πακέτου.
*   ***pre_upgrade*** - Η δέσμη εντολών εκτελείται πριν εξαχθούν τα αρχεία. Δέχεται δύο ορίσματα κατά σειρά: η νέα έκδοση του πακέτου, η παλαιά έκδοση του πακέτου.
*   ***post_upgrade*** - Η δέσμη εντολών εκτελείται μετά την εξαγωγή των αρχείων. Δέχεται δύο ορίσματα κατά σειρά: η νέα έκδοση του πακέτου, η παλαιά έκδοση του πακέτου.
*   ***pre_remove*** - Η δέσμη εντολών εκτελείται ακριβώς πρίν απομακρυνθούν τα αρχεία. Δέχεται ένα όρισμα: η παλαιά έκδοση του πακέτου.
*   ***post_remove*** - Η δέσμη εντολών εκτελείται ακριβώς μετά την απομάκρυνση των αρχείων. Δέχεται ένα όρισμα: η παλαιά έκδοση του πακέτου.

Κάθε συνάρτηση εκτελείται υπό αλλαγή ριζικού καταλόγου (chroot) μέσα στον κατάλογο εγκατάστασης του pacman. Δείτε [το νήμα](https://bbs.archlinux.org/viewtopic.php?pid=913891).

**Tip:** Ένα πρότυπο αρχείο `.install` παρέχεται στην διαδρομή `/usr/share/pacman/proto.install`.

### changelog

Το όνομα του αρχείου καταγραφής αλλάγών του πακέτου. Για να δείτε το αρχείο καταγραφής εγκατεστημένων πακέτων (δεδομένου οτι παρέχουν τέτοιο αρχείο):

```
pacman -Qc *pkgname*

```

**Tip:** Ένα πρότυπο αρχείου καταγραφής αλλαγών παρέχεται στην διαδρομή `/usr/share/pacman/ChangeLog.proto`

### source

Μια σειρά αρχείων τα οποία χρειάζονται για την δημιουργία του πακέτου. Πρέπει να περιέχει την τοποθεσία των πηγαίων αρχείων του λογισμικού, τα οποία συνήθως βρίσκονται σε μια πλήρη διεύθυνση HTTP ή FTP. Οι μεταβλητές που ορίστηκαν προηγουμένως `pkgname` και `pkgver` μπορούν να χρησιμοποιηθούν εδώ (π.χ. `source=(http://example.com/$pkgname-$pkgver.tar.gz)`)

**Note:** Αν πρέπει να παράσχετε αρχεία τα οποία δεν είναι άμεσα διαθέσιμα προς μεταφόρτωση, π.χ. ιδιόχειρες διορθώσεις, απλά τοποθετήστε τα στον ίδιο κατάλογο που βρίσκεται το αρχείο `PKGBUILD` και προσθέστε το όνομα αρχείου στο πεδίο αυτό. Οποιεσδήποτε διαδρομές προστεθούν εδώ επιλύονται σε σχέση με τον κατάλογο που βρίσκεται το αρχείο `PKGBUILD`. Πριν ξεκινήσει η πραγματική διαδικασία δημιουργίας του πακέτου, όλα τα αρχεία που αναφέρονται στο πεδίο αυτό θα μεταφορτωθούν ή θα ελεγχθεί η ύπαρξη τους, και το `makepkg` δεν θα συνεχίσει εάν λείπουν.

**Tip:** Μπορείτε να ορίσετε κάποιο διαφορετικό όνομα για το αρχείο που μεταφορτώθηκε - Αν το αρχείο που μεταφορτώθηκε για κάποιο λόγο έχει διαφορετικό όνομα όπως, το URL να έχει μια GET παράμετρο - ακολουθώντας την παρακάτω σύνταξη: `*filename*::*fileuri*`, για παράδειγμα `$pkgname-$pkgver.zip::http://199.91.152.193/7pd0l2tpkidg/jg2e1cynwii/Warez_collection_16.4.exe`

### noextract

Μια σειρά αρχείων τα οποία παραθέτονται στο πεδίο `source`, δεν πρέπει να εξαχθούν από την συμπιεσμένη τους μορφή με το `makepkg`. Εφαρμόζεται κυρίως σε συγκεκριμένα αρχεία zip τα οποία δεν μπορεί να χειριστεί το `/usr/bin/bsdtar` διότι το [libarchive](https://www.archlinux.org/packages/?name=libarchive) αντιμετωπίζει όλα τα αρχεία ως ροές σε αντίθεση με το [unzip](https://www.archlinux.org/packages/?name=unzip) που ακολουθεί την λογική της τυχαίας προσπέλασης. Σε αυτές τις περιπτώσεις το `unzip` πρέπει να παρατίθεται στο πεδίο `makedepends` και η πρώτη γραμμή της συνάρτησης [build()](/index.php/Creating_packages#The_build.28.29_function "Creating packages") πρέπει να περιέχει:

```
cd "$srcdir/$pkgname-$pkgver"
unzip [source].zip

```

Ας σημειωθεί ότι ενώ το πεδίο `source` δέχεται URLs, το `noextract` αντιπροσωπεύει **απλά** το κομμάτι του ονόματος αρχείου . Επί παραδείγματι, θα κάνατε κάτι σαν αυτό (απλοποιημένο από το αρχείο [PKGBUILD](https://projects.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/grub2&id=f054e33a0b5cbdfe7d81e91a8c4c807a9bfaa124) του grub2 ):

```
source=("http://ftp.archlinux.org/other/grub2/grub2_extras_lua_r20.tar.xz")
noextract=("grub2_extras_lua_r20.tar.xz")

```

Για να μην εξάγετε *τίποτα*, μπορείτε να κάνετε κάτι έξυπνο όπως (υιοθετημένο από το αρχείο [firefox-i18n](https://projects.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/firefox-i18n&id=cb10a40aeda9b444285d1ae6959c344110b4c936)):

```
noextract=(${source[@]##*/})

```

**Note:** Μια πιο συντηρητική υποκατάσταση Bash θα περιελάμβανε εισαγωγικά, η πιθανώς ένα βρόγχο ο οποίος καλεί την `basename`. Εάν έχετε διαβάσει ως εδώ θα πρέπει να αντιλαμβάνεστε το νόημα.

### md5sums

Μια σειρά από MD5 checksums των αρχείων που παραθέτονται στο πεδίο `source`. Μόλις όλα τα αρχεία του πεδίου `source` είναι διαθέσιμα, Ένα MD5 hash για κάθε αρχείο θα παραχθεί αυτόματα και θα συγκριθεί με τις τιμές αυτού του πεδίου με την ίδια σειρά που εμφανίζονται στο πεδίο `source`. Ενώ η σειρά των πηγαίων αρχείων δεν έχει σημασία, είναι σημαντικό να ακολουθεί την σειρά αυτού του πεδίου μιας και το `makepkg` δεν μπορεί να μαντέψει ποιο checksum ανήκει σε ποιό πηγαίο αρχείο. Μπορείτε γρήγορα και εύκολα να παράγετε τις τιμές του πεδίου αυτού εκτελώντας την εντολή `makepkg -g` στον κατάλογο τον οποίο βρίσκεται το αρχείο `PKGBUILD`. Ας σημειωθεί ότι ο αλγόριθμος MD5 έχει γνωστές αδυναμίες, οπότε θα πρέπει να σκεφτείτε την χρήση ενός ισχυρότερου εναλλακτικού.

### sha1sums

Μια σειρά από SHA-1 160-bit checksums. Αποτελεί εναλλακτικό των `md5sums` που περιγράφονται παραπάνω, όμως είναι επίσης γνωστό ότι έχει αδυναμίες, οπότε θα πρέπει να σκεφτείτε την χρήση ενός ισχυρότερου εναλλακτικού. Για να ενεργοποιήσετε την χρήση και την παραγωγή αυτών των checksums, σιγουρευτείτε ότι ρυθμίσατε την επιλογή `INTEGRITY_CHECK` στο αρχείο `/etc/makepkg.conf`. Δείτε τις σελίδες [makepkg.conf(5)](https://jlk.fjfi.cvut.cz/arch/manpages/man/makepkg.conf.5).

### sha256sums, sha384sums, sha512sums

Μια σειρά από SHA-2 checksums με ακολουθίες των 256, 384 και 512 bits αντίστοιχα. Αποτελούν εναλλακτικές των `md5sums` που περιγράφηκαν παραπάνω και γενικά πιστεύεται ότι είναι ισχυρότερες. Για να ενεργοποιήσετε την χρήση και την παραγωγή αυτών των checksums, σιγουρευτείτε ότι ρυθμίσατε την επιλογή `INTEGRITY_CHECK` στο αρχείο `/etc/makepkg.conf`. Δείτε τις σελίδες man [makepkg.conf(5)](https://jlk.fjfi.cvut.cz/arch/manpages/man/makepkg.conf.5).

## Δείτε επίσης

*   [PKGBUILD(5) Manual Page](https://www.archlinux.org/pacman/PKGBUILD.5.html)
*   [Υπόδειγμα αρχείου PKGBUILD](http://pastebin.com/MeXiLDV9)
*   [Υπόδειγμα αρχείου .install](http://seberm.pastebin.com/gP0tBqvs)